package com.ares.service.action;

import java.util.Date;

import com.ares.service.actionform.LoginActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpSession;

import com.ares.service.bean.BeanPeriodo;
import com.ares.service.bean.BeanUsuario;
import com.ares.service.servicio.EvaluacionSapService_I;
import com.ares.service.servicio.PaqueteBusinessDelegate;
import com.ares.service.servicio.UsuarioSapService_I;
import com.ares.service.util.LdapSeguridad;
import org.apache.struts.actions.DispatchAction;

public class LoginAction extends DispatchAction {
    EvaluacionSapService_I evaluacionService = PaqueteBusinessDelegate.getEvaluacionSapService_I();
    UsuarioSapService_I servicio = PaqueteBusinessDelegate.getUsuarioSapService_I();
	private final static Logger logger = Logger.getLogger(LoginAction.class);
    
    public ActionForward loguearse(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		if (logger.isDebugEnabled())
			logger.debug("Entrando a LoginAction.loguearse");
    	LoginActionForm dform = (LoginActionForm) form;
        HttpSession session = request.getSession();               

        //OBTENGO EL USUARIO Y PASSWORD QUE HA INGRESADO
        String strLogin = dform.getStrLogin();
        String strClave = dform.getStrClave();
        //System.out.println("Usuario: " + strLogin);
        //System.out.println("Clave: " + strClave);
        Integer intResult = -1;
        String strMsj = "";
        BeanUsuario beanUsuLogin = null;

        LdapSeguridad ldapSeguridad = new LdapSeguridad();

        if (ldapSeguridad.autenticaUsuario(strLogin, strClave)) {
//        	Entro a SAP
            intResult = 1;
            System.out.println("Entro a la RED");
        } else {
            intResult = 2;
            System.out.println("NO Entro a la RED");
        }

        
        switch (intResult) {
            case 1:
                beanUsuLogin = servicio.getUsuario(strLogin.toUpperCase());
                System.out.println("id: " + beanUsuLogin.getStrPernr());
                if (!beanUsuLogin.getStrName().equals("")) {
//                	beanUsuLogin.getIntrol es el ROL > <
                	 session.setMaxInactiveInterval(-1);
                	 if (beanUsuLogin.getExcluye().equals("X") ) {
                		    strMsj = "No cuenta con acceso al sistema.";
                		 	break;
						} else if(beanUsuLogin.getGrado()<13 && beanUsuLogin.getPermite().equals("")){
							strMsj = "No cuenta con acceso al sistema.";
                		 	break;
						}
                	//Obtener los Periodos
//                     String periodo;
//                     BeanPeriodo beanPeriodo = new BeanPeriodo();
//                     beanPeriodo =  evaluacionService.validarPeriodosEmpleado();
//                     periodo= beanPeriodo.getResultado();
//                     request.setAttribute("periodo", periodo);
//                     System.out.println("periodo: " + periodo);
                	 
                    switch (beanUsuLogin.getIntrol()) {
                        case 1:
                            session.setAttribute("session_usuario", beanUsuLogin);

                            if(beanUsuLogin.getStrMailJefe().equals("")){
                                session.setAttribute("correo_evaluador","VACIO");
                            }
                            else {
                                session.setAttribute("correo_evaluador",beanUsuLogin.getStrMailJefe());
                            }
                            
                            
                            return mapping.findForward("usuario");

                        case 2:
//                        	System.out.println("Flag");
                        	//session.setAttribute("flag_popup", "0");
                        	//session.setAttribute("flag_listado", "0");
                            session.setAttribute("session_usuario", beanUsuLogin);

                            if(beanUsuLogin.getStrMailJefe().equals("")){
                                session.setAttribute("correo_evaluador","VACIO");
                            }
                            else {
                                session.setAttribute("correo_evaluador",beanUsuLogin.getStrMailJefe());
                            }
                            
//                            Si No tiene Jefe F.
                            if (beanUsuLogin.getFlagJefeFuncional().equals("")) {
								 System.out.println("No Tiene Jefe funcional");
								 session.setAttribute("jefeFuncional","VACIO");
								 session.setAttribute("correo_jefeFuncional","VACIO");
							} else {
								 System.out.println("Si Tiene Jefe funcional");
								 session.setAttribute("jefeFuncional","X");
								 System.out.println("beanUsuLogin.getStrMailSuplente(): " + beanUsuLogin.getStrMailSuplente());
								 session.setAttribute("correo_jefeFuncional", beanUsuLogin.getStrMailSuplente());
							}
                            
                            session.setAttribute("session_usuario_jefe", strLogin);
                            System.out.println("correo F: " + session.getAttribute("correo_jefeFuncional"));
//                            Date d = new Date(session.getCreationTime());
//                            System.out.println(" Creado " + d);
                           
//                            System.out.println("Intervalo " + session.getMaxInactiveInterval());
                            return mapping.findForward("usuario");
                    }
                } else {
                    strMsj = "Usuario No encontrado en Sap, contacte a mesa de ayuda. ";
                }
                break;

            case 2:
                strMsj = "Verifique usuario y password.";
                break;

            default:
                strMsj = "Error en la conexion al Active Directory.";
                break;
        }

        System.out.println("strMsj: " + strMsj);
        if (!strMsj.equals("")) {
            request.setAttribute("strMsj", strMsj);
            return mapping.findForward("error");
        }
        return null;
    }

    public ActionForward refrescarmenu(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
    	HttpSession session = request.getSession(); 
    	session.removeAttribute("lstpilares");
        session.removeAttribute("lstObjetivo");
        session.removeAttribute("lstMetas");
    	
        System.out.println("Entro RefrescarMenu");
    	return mapping.findForward("usuario");
    }
}